﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Ecommerce.Model
{
    public class CategoriaModel:BaseData
    {

        private const string keyCacheCategoriasHome = "categoriasHome";

        public void Inserir(tb_cat_categoria categoria)
        {
            using (EcommerceEntities db = new EcommerceEntities(this.InicializarStringConexao(), false))
            {
                db.tb_cat_categoria.Add(categoria);
                db.SaveChanges();
            }
        }

        public List<tb_cat_categoria> Listar()
        {
            List<tb_cat_categoria> categorias;
            using (EcommerceEntities db = new EcommerceEntities(this.InicializarStringConexao(), false))
            {
                categorias = db.tb_cat_categoria.OrderBy(x => x.cat_des_categoria).ToList();
            }
            return categorias;
        }

        public tb_cat_categoria Obter(int identificador)
        {
            tb_cat_categoria categoria;
            using (EcommerceEntities db = new EcommerceEntities(this.InicializarStringConexao(), false))
            {
                categoria = db.tb_cat_categoria.Where(x=> x.cat_idt_categoria.Equals(identificador)).FirstOrDefault();
            }
            return categoria;
        }

        public List<tb_cat_categoria> ListarCategoriasHome()
        {
            List<tb_cat_categoria> categorias = CacheModel.Obter<List<tb_cat_categoria>>(keyCacheCategoriasHome);

            if (categorias == null)
            {
                using (EcommerceEntities db = new EcommerceEntities(this.InicializarStringConexao(), false))
                {
                    categorias = db.tb_cat_categoria.Where(x => !x.cat_idt_categoria_pai.HasValue).OrderBy(x => x.cat_idt_categoria).ToList();
                }
                CacheModel.Inserir(keyCacheCategoriasHome, categorias, 1440);
            }

            return categorias;
        }

        public List<tb_cat_categoria> ListarFilhas(int identificadorCategoriaPai)
        {
            List<tb_cat_categoria> categorias;
            using (EcommerceEntities db = new EcommerceEntities(this.InicializarStringConexao(), false))
            {
                categorias = Traduzir(db.spr_cat_categoria_s(identificadorCategoriaPai));
            }
            return categorias;
        }

        private List<tb_cat_categoria> Traduzir(System.Data.Objects.ObjectResult<spr_cat_categoria_s_Result> result)
        {
            List<tb_cat_categoria> lista = new List<tb_cat_categoria>();
            foreach (var item in result)
            {
                lista.Add(new tb_cat_categoria
                {
                    cat_dat_criacao = item.cat_dat_criacao.Value,
                    cat_des_categoria = item.cat_des_categoria,
                    cat_flg_ativo = item.cat_flg_ativo.Value,
                    cat_idt_categoria = item.cat_idt_categoria.Value,
                    cat_idt_categoria_pai = item.cat_idt_categoria_pai
                });
            }

            return lista;
        }
    }
}
